জাভাস্ক্রিপ্টে বিটওয়াইজ অপারেটরগুলি গাণিতিক অপারেশন করা হয় বিট স্তরের উপরে। অর্থাৎ, সংখ্যা দুটি বাইনারি (বাইনারি মানে ০ ও ১) ফর্মেটে পরিণত হয় এবং তারপরে বিট স্তরে অপারেশন চালানো হয়। এই অপারেটরগুলি মূলত লো-লেভেল প্রোগ্রামিংয়ে ব্যবহার করা হয়, তবে গাণিতিক বা অন্যান্য প্রয়োজনেও এর প্রয়োগ হতে পারে।
জাভাস্ক্রিপ্টে মোট ৭টি বিটওয়াইজ অপারেটর রয়েছে:
&
)|
)^
)~
)<<
)>>
)>>>
)&
)&
অপারেটর দুটি সংখ্যা (বাইনারি ফর্ম্যাটে) বিট স্তরে AND অপারেশন করে। দুইটি বিটের মধ্যে উভয়ই ১ হলে ফলস্বরূপ ১ হবে, অন্যথায় ০ হবে।
let a = 5; // বাইনারি: 0101
let b = 3; // বাইনারি: 0011
console.log(a & b); // আউটপুট: 1 (বাইনারি: 0001)
এখানে, 5 (0101) এবং 3 (0011)-এর মধ্যে বিট স্তরে AND অপারেশন করা হয়েছে, যার ফলে ফলস্বরূপ 0001 (১) হয়েছে।
|
)|
অপারেটর দুটি সংখ্যা (বাইনারি ফর্ম্যাটে) বিট স্তরে OR অপারেশন করে। দুইটি বিটের মধ্যে যেকোনো একটিতে ১ থাকলেই ফলস্বরূপ ১ হবে।
let a = 5; // বাইনারি: 0101
let b = 3; // বাইনারি: 0011
console.log(a | b); // আউটপুট: 7 (বাইনারি: 0111)
এখানে, 5 (0101) এবং 3 (0011)-এর মধ্যে বিট স্তরে OR অপারেশন করা হয়েছে, যার ফলে ফলস্বরূপ 0111 (৭) হয়েছে।
^
)^
অপারেটর দুটি সংখ্যা (বাইনারি ফর্ম্যাটে) বিট স্তরে XOR অপারেশন করে। দুইটি বিটের মধ্যে একটি ১ এবং অন্যটি ০ হলে ফলস্বরূপ ১ হবে, অন্যথায় ০ হবে।
let a = 5; // বাইনারি: 0101
let b = 3; // বাইনারি: 0011
console.log(a ^ b); // আউটপুট: 6 (বাইনারি: 0110)
এখানে, 5 (0101) এবং 3 (0011)-এর মধ্যে বিট স্তরে XOR অপারেশন করা হয়েছে, যার ফলে ফলস্বরূপ 0110 (৬) হয়েছে।
~
)~
অপারেটর একটি সংখ্যা (বাইনারি ফর্ম্যাটে) বিট স্তরে ইনভার্ট করে। অর্থাৎ, সব ১ কে ০ এবং সব ০ কে ১ করে। এটি একটি ইউনারি অপারেটর, যার ফলে এটি একটি সংখ্যা নেগেটিভও করে দেয়।
let a = 5; // বাইনারি: 0101
console.log(~a); // আউটপুট: -6 (বাইনারি: 1010)
এখানে, 5 (0101)-এর বিট ইনভার্ট করলে এটি 1010 (নেগেটিভ ৬) হয়ে যায়।
<<
)<<
অপারেটর একটি সংখ্যা বাইনারি ফর্ম্যাটে বাম দিকে শিফট করে। এতে সংখ্যার মান গুণফল বাড়ানো হয় (গুণফল ২ এর একটি শক্তি হতে পারে)।
let a = 5; // বাইনারি: 0101
console.log(a << 1); // আউটপুট: 10 (বাইনারি: 1010)
এখানে, 5 (0101)-কে একটি বিট বাম দিকে শিফট করার ফলে এটি 10 (1010) হয়ে গেছে।
>>
)>>
অপারেটর একটি সংখ্যা বাইনারি ফর্ম্যাটে ডান দিকে শিফট করে। এতে সংখ্যার মান ভাগফল কমানো হয় (ভাগফল ২ এর একটি শক্তি হতে পারে)। এটি সাইন এক্সটেনশন প্রক্রিয়া ব্যবহার করে, অর্থাৎ এটি নেতিবাচক সংখ্যা থাকলে সাইনকে বজায় রাখে।
let a = 5; // বাইনারি: 0101
console.log(a >> 1); // আউটপুট: 2 (বাইনারি: 0010)
এখানে, 5 (0101)-কে একটি বিট ডান দিকে শিফট করার ফলে এটি 2 (0010) হয়ে গেছে।
>>>
)>>>
অপারেটর একটি সংখ্যা বাইনারি ফর্ম্যাটে ডান দিকে শিফট করে এবং সাইন এক্সটেনশন ছাড়াই শিফট করে। এর মানে হল যে নেতিবাচক সংখ্যার জন্যও সাইন পরিবর্তন হয় না, এবং শূন্য দিয়ে পূর্ণ হয়।
let a = -5; // বাইনারি: 11111111111111111111111111111011
console.log(a >>> 1); // আউটপুট: 2147483642
এখানে, -5 (11111111111111111111111111111011)-কে শিফট করার পর শূন্য দিয়ে পূর্ণ হয়ে যায় এবং একটি বড় পজিটিভ সংখ্যায় পরিণত হয়।
বিটওয়াইজ অপারেটর সাধারণত লো-লেভেল প্রোগ্রামিং, এনকোডিং, এনক্রিপশন বা হার্ডওয়্যার সম্পর্কিত অ্যাপ্লিকেশনগুলিতে ব্যবহার করা হয়। তবে, জাভাস্ক্রিপ্টে এগুলি গাণিতিক অপারেশন অথবা বিশেষ ধরনের ডেটা ম্যানিপুলেশনে ব্যবহৃত হতে পারে।
জাভাস্ক্রিপ্টের বিটওয়াইজ অপারেটরগুলি গাণিতিক অপারেশনগুলি বিট স্তরে সম্পাদন করে, যা প্রোগ্রামিংয়ে লো-লেভেল ডেটা ম্যানিপুলেশন করতে সহায়তা করে। এই অপারেটরগুলির মধ্যে রয়েছে AND (&
), OR (|
), XOR (^
), NOT (~
), শিফট লেফট (<<
), শিফট রাইট (>>
), এবং শিফট রাইট উইথ সাইন এক্সটেনশন (>>>
)। বিটওয়াইজ অপারেটর ব্যবহার করে ডেটার সাথে বিভিন্ন কমপ্লেক্স অপারেশন করা যায় যা অন্যান্য অপারেটরের মাধ্যমে করা সম্ভব নয়।
common.read_more